Присваиние и порядок вычислений
===============================

Первые две трудности, с которыми сталкивается большинство студентов при обучении программированию, связаны с операцией присвоения и порядком вычислений.


Операция присвоения
--------------------

.. index::
    операция присвоения

Вы увидите строки, подобные приведенным ниже, почти в каждой программе практически в любом программирования:

.. code-block:: d

    a = 10;

Назначение этой строки - "сделать значение перемнной a равным 10". Аналогично, следующая
строка означает "сделать значение b равным 20":

.. code-block:: d

    b = 20;


Основываясь на этой информации, что можно сказать о следующей строке?

.. code-block:: d

    a = b;


К сожалению, эта строка говорит не о понятии равенства в математике, которое мы
все знаем. Приведенное выше выражение не означает "a равно b"! Когда мы применяем
ту же логику, что и в предыдущих двух строках, приведенное выше выражение должно означать "сделать
так, чтобы значение a стало равным значению b".
Хорошо известный математический символ = имеет совершенно другое значение
в программировании: сделайте значение левой части таким же, как значение правой части.


Порядок вычислений
-------------------

.. index::
    порядок вычислений

В общем, операции программы применяются шаг за шагом в том порядке, в котором
они отображаются в программе. (Из этого правила есть исключения, которые мы рассмотрим
в последующих главах.) Мы можем увидеть предыдущие три выражения в программе в
следующем порядке:

.. code-block:: d

    a = 10;
    b = 20;
    a = b;


Смысл этих трех строк в целом таков: "сделайте так, чтобы значение a стало равным 10,
затем сделайте так, чтобы значение b стало равным 20, затем сделайте так, чтобы значение a стало равным значению b".
Соответственно, после выполнения этих трех операций значение как a, так и b
будет равно 20.

Упражнение
-----------

Обратите внимание, что следующие три операции меняют местами значения a и b. Если в начале
вначале их значения равны 1 и 2 соответственно, после выполнения операций значения
становятся 2 и 1:

.. code-block:: d

    c = a;
    a = b;
    b = c;

Решение находится на странице :ref:`Присваивание и порядок вычисления выражений<Присваивание и порядок вычисления выражений>`.

